package com.algorithm;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Stack;

/**
 * 项目名称: java_algorithm
 * @ClassName MyStack
 * @Description
 *
 * 模拟一个栈，有两个方法，入栈push(int i)，出栈pop();
 * 	pop要拿出栈中出现次数最多 且最靠前的数据：
 * 	执行了六次push   2 3 2  4  2 3;
 * 	那第一次pop得到的是2 第二次得到是3 第三次是2
 *  和redis的lru算法刚好相反（不是全部）
 * @Author huipanxing huipanxing@chinasofti.com   @Date 2021/10/18 16:32
 */
public class MyStack {

    private Stack<Integer> stack=new Stack<>();
    private Map<Integer, Integer> map=new HashMap<>();

    public void push(int i) {
        stack.push(i);
        if (map.get(i) != null) {
            map.put(i, map.get(i));
        } else {
            map.put(i, 0);
        }
    }

    public Integer pop(){
        Optional<Map.Entry<Integer, Integer>> max = map.entrySet().stream().max(Map.Entry.comparingByValue());
        System.out.println("fff");
        stack.pop();
        return 0;
    }

    public static void main(String[] args) {
        MyStack myStack=new MyStack();
        myStack.push(2);
        myStack.push(3);
        myStack.push(2);
        myStack.push(4);
        myStack.push(2);
        myStack.push(3);
        Integer pop = myStack.pop();
        Integer pop1 = myStack.pop();
    }
}
